package org.batatasframework.support.database.sql.field;

import org.batatasframework.support.database.AliasNamed;
import org.batatasframework.support.database.IdentifyTableBase;
import org.batatasframework.support.database.metadatas.FieldMetadata;

/**
 * <pre>这是一个具体被查询的字段，与{@link SelectFragment}不同的是{@link SelectFragment}为字段查询的结果，
 * 其读取的值直接返回给调用者，而本接口是定义查询语句里的一个查询字段。
 * {@link SelectFragment}有可能是一个组合结果，需要由多个数据库表字段组成；
 * 多个{@link SelectFragment}也有可能访问同一个数据库表的字段
 * 
 * 执行后的查询语句，可以生成临时表或视图等，所以这个查询的字段又成为了一个可以查询的字段，即：{@link FieldMetadata}，
 * 可以使用新的查询语句来查询刚刚生成的临时表或视图。
 * 
 * 查询语句里的一个字段元素</pre>
 * 
 * @author jackson
 *
 */
public interface FieldElement extends FieldSourcable, FieldMetadata, AliasNamed{
	
	/** 把定义的字段转为查询语句里的表达式 */
	void toSqlString(StringBuilder sqlBuilder, IdentifyTableBase targetTable) throws Exception;

}
